#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //安装数据库的驱动
    database=QSqlDatabase::addDatabase("QSQLITE"); //sqlite3的驱动

    /*
        设置路径名，setDatabaseName函数会在你指定的路径下帮你新建1.db，如果存在不新建
    */
    database.setDatabaseName("C:/Users/Administrator/Desktop/share/1.db");

    //打开数据库
    database.open();

    //新建书籍表格
    QSqlQuery query(database);
    bool ret=query.exec("create table if not exists booktable (name text,author text,price float);");
    if(!ret)
    {
        qDebug()<<"创建表格失败了";
        return;
    }

    //设置表格的列数
    ui->tableWidget->setColumnCount(3);
    //设置字段名字
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"书名"<<"作者"<<"价格");
    ui->tableWidget->setRowCount(10);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//增加书籍信息
void MainWindow::on_addbookbt_clicked()
{
    //获取输入的书籍信息
    QString name=ui->namele->text();
    QString author=ui->authorle->text();
    QString price=ui->pricele->text();

    //拼接得到插入语句
    QString cmd=QString("insert into booktable values ('%1','%2',%3);").arg(name).arg(author).arg(price);

    //执行插入语句
    QSqlQuery query(database);
    bool ret=query.exec(cmd);
    if(!ret)
    {
        qDebug()<<"插入书籍失败了";
        return;
    }
}
//删除书籍
void MainWindow::on_delboolbt_clicked()
{
    //获取要删除的书名
    QString delname=ui->delnamele->text();

    //拼接得到删除语句
    QString cmd=QString("delete from booktable where name='%1';").arg(delname);

    //执行删除语句
    QSqlQuery query(database);
    bool ret=query.exec(cmd);
    if(!ret)
    {
        qDebug()<<"删除书籍失败了";
        return;
    }
}
//修改书籍
void MainWindow::on_updatebookbt_clicked()
{
    //获取旧的书名
    QString oldname=ui->oldnamele->text();

    //获取你新输入的书籍信息
    QString newname=ui->newnamele->text();
    QString newauthor=ui->newauthorle->text();
    QString newprice=ui->newpricele->text();

    //拼接得到修改语句
    QString cmd=QString("update booktable set name='%1',author='%2',price=%3 where name='%4';").arg(newname).arg(newauthor).arg(newprice).arg(oldname);

    //执行修改语句
    QSqlQuery query(database);
    bool ret=query.exec(cmd);
    if(!ret)
    {
        qDebug()<<"修改书籍失败了";
        return;
    }
}
/*
    查询书籍信息
    增删改查四个操作，查询操作比较特殊(需要有结果反馈，打印出来)
*/
void MainWindow::on_searchbookbt_clicked()
{
    int i=0;
    //清空表格列表框原来显示的内容，会把字段名也清除
    //ui->tableWidget->clear();
    ui->tableWidget->clearContents();

    //把字段名重新设置一下
    //ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"书名"<<"作者"<<"价格");

    //执行查询语句
    QSqlQuery query(database);
    bool ret=query.exec("select * from booktable;");
    if(!ret)
    {
        qDebug()<<"查询书籍失败了";
        return;
    }

    //自己主动写代码遍历查询结果
    while(query.next()) //查询结果遍历完毕next函数返回false，否则next函数返回true
    {
        //打印查询结果
        //value函数的参数表示字段的索引号或者字段名，索引号从0开始
        //value函数的返回值QVariant类型不可以直接打印，需要做类型转换，转换成具体类型才可以打印
        //QVariant是QT的通用(万能)数据类型，该类的构造函数可以把其他数据类型转成类对象
        //                               该类提供toxxx方法，可以把类对象转成其他类型

//        qDebug()<<"书名: "<<query.value(0).toString();
//        qDebug()<<"作者: "<<query.value(1).toString();
//        qDebug()<<"价格: "<<query.value(2).toFloat();

        qDebug()<<"书名: "<<query.value("name").toString();
        qDebug()<<"作者: "<<query.value("author").toString();
        qDebug()<<"价格: "<<query.value("price").toFloat();

        //在表格列表框显示内容
        QTableWidgetItem *item1=new QTableWidgetItem(query.value("name").toString());
        ui->tableWidget->setItem(i,0,item1);
        QTableWidgetItem *item2=new QTableWidgetItem(query.value("author").toString());
        ui->tableWidget->setItem(i,1,item2);
        QTableWidgetItem *item3=new QTableWidgetItem(query.value("price").toString());
        ui->tableWidget->setItem(i,2,item3);
        i++;
    }

}
